<?php
//测试call_user_func(),call_user_func_array(), new self(),new static(),
include "helpers.php";

function aa($a,$b){
    return $a+$b;
}
//调用系统函数
p(call_user_func('explode',',','1,2,3',2));

//调用用户函数
p(call_user_func_array('aa',[8,3,3]));

//基类
class tes{
   public function aa(){
      return $this->a(1,2);
   }

   public function a($a,$b){
       return $a*$b;
   }

   public function dd(){
       return new self();//代表本类 代表基类tes
   }

   public function cc(){
       return new static();//代表被调用的类,如果被子类test的对象调用，代表test的对象
   }

   public function ee(){
       return $this;  //代表被调用的类，如果被子类test的对象调用，代表test的对象
   }


}

//测试类
class test extends tes{
    public function a($a,$b){
        return $a+$b;
    }
    public static function b($a,$b){
        return $a*$b;
    }
    public function c(){
        return call_user_func([$this,'b'],2,3);
    }
    public function d(){
       return  $this->aa();
    }


}




echo '<hr />';


$ob=new test();

p($ob->dd());
p($ob->cc());
p($ob->ee());
p($ob->c());
p($ob->d());
p(test::f());

//调用test类中的b方法
p(call_user_func(['test','b'],5,6));
//调用test类中的b方法
p(call_user_func([$ob,'b'],3,6));
//调用test类中的b方法
p(call_user_func('test::b',5,6));
//调用匿名函数
p(call_user_func(function($a,$b){
     return $a+$b;
},3,5,3));